SpringBoot —— 启动类的注解

作者: 李多多 日期: 2019-04-03
Spring Boot
SpringBoot —— 启动类的注解

1、SpringBoot项目创建完成之后默认会生成一个*Application的入口类,通过该类的main方法即可启动SpringBoot项目。

@SpringBootApplication
public class SpringbootRunApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootRunApplication.class, args);
}
}

2、在此入口类中,我们可以看到SpringBoot创建的业务代码中的一个注解——@SpringBootApplication,这也是SpringBoot的核心注解。源代码如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
/**
* 根据类排除不使用的自动配置
*/
@AliasFor(
annotation = EnableAutoConfiguration.class
)
Class<?>[] exclude() default {};

/**
* 根据类名排除不使用的自动配置
*/
@AliasFor(
annotation = EnableAutoConfiguration.class
)
String[] excludeName() default {};

/**
* 指定扫描的包
*/
@AliasFor(
annotation = ComponentScan.class,
attribute = "basePackages"
)
String[] scanBasePackages() default {};

/**
* 指定扫描的类
*/
@AliasFor(
annotation = ComponentScan.class,
attribute = "basePackageClasses"
)
Class<?>[] scanBasePackageClasses() default {};
}

exclude:根据类排除不使用的自动配置
excludeName:根据类名排除不使用的自动配置;
scanBasePackages:扫描指定的包;
scanBasePackageClasses:扫描指定的类;

@SpringBootApplication = @SpringBootConfiguration(Configuration) + @EnableAutoConfiguration + @ComponentScan

Configuration: 普通配置类。

EnableAutoConfiguration: 开启自动化配置(Spring/SpringMVC那套东西都有了 )。可以根据类路径中的jar包依赖可以为项目进行一些自动配置。这也是SpringBoot最核心的功能。

ComponentScan: 用来指定扫描的组建所在的包路径或class文件(扫描启动类所在的包下面的所有类)。

如果忘记或不知道SpringBoot默认扫描的路径,随意创建包和类的位置,导致项目启动之后,无法实例化对应的组建,无法正确访问接口,那么我们就可以使用@ComponentScan来指定一些特殊的需要实例化的包或类,如下:

//指定一些特殊的需要实例化的包或类

@SpringBootApplication(scanBasePackages = “com.example.controller")
// 或者
@ComponentScan(basePackages = "com.example.controller")